SUMMARY:
This just removes exactly 1 result by replacing it with the one that comes after it, which shifts all results down 1.  Then it returns to resume checking the next results, and if they are unwanted results it will go to this and remove them again.  It replaces the last stored result's address and value with 0 so there are no left over copies.
An example of results, before and after.
Before:
0042dab0 00000004
0042dab4 00000004
0042dac4 00000003 (the result it removes)
0042db04 00000004
0042db44 00000004
0042db84 00000004
After:
0042dab0 00000004
0042dab4 00000004
0042db04 00000004
0042db44 00000004
0042db84 00000004
00000000 00000000
Then it's done.


200ffee4 35e10000 ori at, t7, $0000           Store the result removed so it knows where to return to to resume checking the next results.
200ffee8 8dea0008 lw t2, $0008(t7)            Load the next result's address.
200ffeec 8deb000c lw t3, $000c(t7)            Load the next result's value.
200ffef0 adea0000 sw t2, $0000(t7)            Replace the unwanted result's address with the next result's address.
200ffef4 11400003 beq t2, zero, $000fff04     Branch if the next result's address was 0, meaning it just finished removing that one unwanted result.
200ffef8 adeb0004 sw t3, $0004(t7)            Replace the unwanted result's value with the next result's value.
200ffefc 1000fffa beq zero, zero, $000ffee8   Go through it all again and shift each result down 1.
200fff00 25ef0008 addiu t7, t7, $0008         Add 8 so it can move the next result down 1.
200fff04 03e00008 jr ra
200fff08 342f0000 ori t7, at, $0000           Load where this started to shift the results down 1 so it can resume the extra scan where it left off.